package gcp.cadastros;

import gcp.Emprestimo;
import gcp.Usuario;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

/**
 * CadastroEmprestimo<br>
 * Banco responsavel em manter o cadastro de emprestimos.
 */
public class CadastroEmprestimo implements Serializable {

    private static final long serialVersionUID = 1L;
    private List<Emprestimo> emprestimos;

    /**
     * Construtor default.
     */
    public CadastroEmprestimo() {
        emprestimos = new ArrayList<Emprestimo>();
    }

    /**
     * Adiciona um Emprestimo.
     * @param emprestimo Emprestimo a ser adicionado.
     * @throws Exception lancada quando o Emprestimo foi inexistente.
     */

    public void adicionaEmprestimo(Emprestimo emprestimo) throws Exception {
        if (emprestimo == null) {
            throw new Exception("Nao eh possivel adicionar emprestimo nulo.");
        }
        emprestimos.add(emprestimo);
    }

    /**
     * Remove um Emprestimo.
     * @param emprestimo Emprestimo a ser adicionado.
     * @throws Exception lancada quando o Emprestimo foi inexistente.
     */

    public void removeEmprestimo(Emprestimo emprestimo) throws Exception {
        if (emprestimo == null) {
            throw new Exception("Nao eh possivel remover emprestimo nulo.");
        }
        emprestimos.remove(emprestimo);
    }

    /**
     * Retorna uma lista com os emprestimos que tomaram ao Usuario.
     * @param usuario Usuario que emprestou.
     * @return retorno Lista de itens de emprestimos feitos feitos pelo Usuario.
     */
    public List<Emprestimo> getItensEmprestados(Usuario usuario) {
        List<Emprestimo> retorno = new ArrayList<Emprestimo>();
        for (Emprestimo emprestimo : emprestimos) {
            if (emprestimo.getProprietario() == usuario) {
                retorno.add(emprestimo);
            }
        }
        return retorno;
    }

    /**
     * Retorna uma lista com todos os emprestimos que o usuario tomou.
     * @param usuario Usuario do GCP.
     * @return retorno Lista que possui os itens de emprestimos tomados pelo
     *         Usuario.
     */
    public List<Emprestimo> getItensPedidosEmprestados(Usuario usuario) {
        List<Emprestimo> retorno = new ArrayList<Emprestimo>();
        for (Emprestimo emprestimo : emprestimos) {
            if (emprestimo.getEmprestadoA() == usuario) {
                retorno.add(emprestimo);
            }
        }
        return retorno;
    }

    /**
     * Retorna a lista de emprestimos.
     * @return Lista de emprestimos.
     */
    public List<Emprestimo> getEmprestimos() {
        return emprestimos;
    }
    /**
     * Remove o usuario juntamente com seus emprestimos
     * @param usuario Usuario a ser removido.
     */
    public void removerUsuario(Usuario usuario) {
        emprestimos.remove(usuario);
    }

    /**
     * Define a lista de emprestimos.
     * @param emprestimos Lista de emprestimos.
     */
    public void setEmprestimos(List<Emprestimo> emprestimos) {
        this.emprestimos = emprestimos;
    }
}